package configstc

type UserAppConfig struct {
	Name string `json:"Name" yaml:"Name"`

	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"` //作为api服务器
	RpcServer ServerConfig `json:"RpcServer" yaml:"RpcServer"` //作为rpc服务器

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//debug开关
	Debug bool `json:"Debug" yaml:"Debug"`

	AuthConfig   AuthConfig `json:"AuthConfig" yaml:"AuthConfig"`     //授权配置
	AuthRegister bool       `json:"AuthRegister" yaml:"AuthRegister"` //是否支持注册

	AdminAuthConfig AuthConfig `json:"AdminAuthConfig" yaml:"AdminAuthConfig"` //授权配置(管理站)

	DBConfig DBConfig `json:"DBConfig" yaml:"DBConfig"` //数据库配置

	EmailConfig EmailConfig `json:"EmailConfig" yaml:"EmailConfig"` //邮件配置

	LimitingApi LimitingConfig `json:"LimitingApi" yaml:"LimitingApi"` //api限流

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀

	AutoCreateUser []CreateUserConfig `json:"AutoCreateUser" yaml:"AutoCreateUser"` //自动创建用户列表

	WechatAuth ThirdConfig `json:"WechatAuth" yaml:"WechatAuth"` //微信配置

	SmsConfig ThirdConfig `json:"SmsConfig" yaml:"SmsConfig"` //短信配置，目前使用阿里云

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	//是否启用pprof
	PProfEnable bool `json:"PProfEnable" yaml:"PProfEnable"`

	PasswordSalt string `json:"PasswordSalt" yaml:"PasswordSalt"` //密码salt

	ModuleMode bool `json:"ModuleMode"  yaml:"ModuleMode"` //模块模式，作为module使用
}

type CreateUserConfig struct {
	UserName string `json:"UserName" yaml:"UserName"` //用户名
	Account  string `json:"Account" yaml:"Account"`   // 账户
	Password string `json:"Password" yaml:"Password"` //密码
}

type BaseDataAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"`

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//debug开关
	Debug bool `json:"Debug" yaml:"Debug"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	ModuleMode bool `json:"ModuleMode"  yaml:"ModuleMode"` //模块模式，作为module使用
}

type WebAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	WebServer ServerConfig `json:"WebServer" yaml:"WebServer"` //web服务器配置
	//支持静态文件
	StaticPath   string `json:"StaticPath" yaml:"StaticPath"`     //静态文件路径,支持静态html等
	StaticRouter string `json:"StaticRouter" yaml:"StaticRouter"` //静态路由前缀

	TemplatePath   string `json:"TemplatePath" yaml:"TemplatePath"`     //模板文件路径,按html/template解析
	TemplateRouter string `json:"TemplateRouter" yaml:"TemplateRouter"` //模板访问的路由前缀

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀

	//支持转发功能
	ProxyRules []ProxyRule `json:"ProxyRules" yaml:"ProxyRules"` //转发配置列表

	ModuleMode bool `json:"ModuleMode"  yaml:"ModuleMode"` //模块模式，作为module使用
}

type AdminAppConfig struct {
	Name string `json:"Name" yaml:"Name"`

	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"`

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//debug开关
	Debug bool `json:"Debug" yaml:"Debug"`

	AuthConfig AuthConfig `json:"AuthConfig" yaml:"AuthConfig"`

	DBConfig DBConfig `json:"DBConfig" yaml:"DBConfig"`

	//api限流
	LimitingApi LimitingConfig `json:"LimitingApi" yaml:"LimitingApi"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"`

	AutoCreateAdmin bool `json:"AutoCreateAdmin" yaml:"AutoCreateAdmin"` //是否自动创建admin账户

	//多语言配置：key=language,value=path
	I18nFiles map[string]string `json:"I18nFiles" yaml:"I18nFiles"`

	//权限文件json
	PermissionFile string `json:"PermissionFile" yaml:"PermissionFile"` //权限文件

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	//是否启用pprof
	PProfEnable bool `json:"PProfEnable" yaml:"PProfEnable"`

	PasswordSalt     string `json:"PasswordSalt" yaml:"PasswordSalt"`         //密码salt
	UserPasswordSalt string `json:"UserPasswordSalt" yaml:"UserPasswordSalt"` //用户-密码salt

	ModuleMode bool `json:"ModuleMode"  yaml:"ModuleMode"` //模块模式，作为module使用
}

// ProxyRule 转发规则
type ProxyRule struct {
	Mode string `json:"Mode" yaml:"Mode"` //转发模式

	Match string `json:"Match" yaml:"Match"` //匹配模式，见下面的 ProxyModePrefix/ProxyModeFix

	Forward string `json:"Forward" yaml:"Forward"` //转发目标
	Replace string `json:"Replace" yaml:"Replace"` //替换前缀
}

// WebsocketAppConfig ws应用app
type WebsocketAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"` //web服务器配置

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀
}

// OssAppConfig oss存储app
type OssAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"` //web服务器配置

	DBConfig DBConfig `json:"DBConfig" yaml:"DBConfig"`

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	//是否启用pprof
	PProfEnable bool `json:"PProfEnable" yaml:"PProfEnable"`

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀

	StoragePath string `yaml:"StoragePath"` //临时存储目录
	//配置来源，可配置：
	//	file：配置文件,取下面的 UploadConfig 配置
	//	db： 数据库，取上面配置的 DBConfig 里的表数据
	ConfigSource string `yaml:"ConfigSource"`

	UploadMaxSize int64 `yaml:"UploadMaxSize"` //最大上传大小，单位： b

	//上传类型和上传参数，参考 ossadaptor 包
	UploadType   string                       `yaml:"UploadType"`
	UploadConfig map[string]map[string]string `yaml:"UploadConfig"`
}

// SettingAppConfig 配置app
type SettingAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"` //web服务器配置

	DBConfig DBConfig `json:"DBConfig" yaml:"DBConfig"`

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	//是否启用pprof
	PProfEnable bool `json:"PProfEnable" yaml:"PProfEnable"`

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀
}

// IotAppConfig IOT app
type IotAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"` //web服务器配置

	DBConfig DBConfig `json:"DBConfig" yaml:"DBConfig"`

	AuthConfig AuthConfig `json:"AuthConfig" yaml:"AuthConfig"`

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	//是否启用pprof
	PProfEnable bool `json:"PProfEnable" yaml:"PProfEnable"`

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀
}

// BlockAppConfig 块app
type BlockAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"` //web服务器配置

	DBConfig DBConfig `json:"DBConfig" yaml:"DBConfig"`

	AuthConfig AuthConfig `json:"AuthConfig" yaml:"AuthConfig"`

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	//是否启用pprof
	PProfEnable bool `json:"PProfEnable" yaml:"PProfEnable"`

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀
}

// JobAppConfig job app
type JobAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"` //web服务器配置

	DBConfig DBConfig `json:"DBConfig" yaml:"DBConfig"`

	AuthConfig AuthConfig `json:"AuthConfig" yaml:"AuthConfig"`

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	//是否启用pprof
	PProfEnable bool `json:"PProfEnable" yaml:"PProfEnable"`

	//日志路径
	LogPath  string `json:"LogPath" yaml:"LogPath"`
	LogLevel string `json:"LogLevel" yaml:"LogLevel"`

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀

	JobConfig
}

type RssAppConfig struct {
	Name      string       `json:"Name" yaml:"Name"`
	ApiServer ServerConfig `json:"ApiServer" yaml:"ApiServer"`

	LogConfig LogConfig `json:"LogConfig" yaml:"LogConfig"` //日志配置

	//debug开关
	Debug bool `json:"Debug" yaml:"Debug"`

	AuthConfig AuthConfig `json:"AuthConfig" yaml:"AuthConfig"` //授权配置

	DBConfig DBConfig `json:"DBConfig" yaml:"DBConfig"` //数据库配置

	LimitingApi LimitingConfig `json:"LimitingApi" yaml:"LimitingApi"` //api限流

	//路由前缀
	RoutePrefix string `json:"RoutePrefix" yaml:"RoutePrefix"` //路由前缀

	//是否启用文档
	DocsEnable bool `json:"DocsEnable" yaml:"DocsEnable"`

	//是否启用pprof
	PProfEnable bool `json:"PProfEnable" yaml:"PProfEnable"`

	//rss配置，示例：
	//RssConfig:
	//    - Name: "人民网"
	//		Rss: "http://www.people.com.cn/rss/politics.xml"
	//		Enable: true
	//	  - Name: "搜狐中国"
	//		Rss: "http://rss.news.sohu.com/rss/pfocus.xml"
	//		Enable: false

	RssConfig []RssMetaConfig `json:"RssConfig" yaml:"RssConfig"`

	AsyncInit bool `json:"AsyncInit" yaml:"AsyncInit"` //是否异步初始化运行，包含定时任务等

	ModuleMode bool `json:"ModuleMode"  yaml:"ModuleMode"` //模块模式，作为module使用
}

type RssMetaConfig struct {
	Enable bool   `json:"Enable" yaml:"Enable"`
	Name   string `json:"Name" yaml:"Name"`
	Rss    string `json:"Rss" yaml:"Rss"`
}

const (
	ProxyModePrefix = "prefix" //前缀替换，匹配并替换指定前缀
	ProxyModeFix    = "fixed"  //固定地址，完全匹配路由进行转发
)
